import type { VxeGridProps } from '@vben/plugins/src/vxe-table/types';

import type { BtnFunctionType } from '#/views/onlineDesign/designPage/template/type/types';

// 默认的新增方法
import { message } from 'ant-design-vue';

export async function handlerAdd(
  formModalApi,
  formDrawerApi,
  popupParams,
  config,
) {
  if (config.form.extra.openFormType === 'modal') {
    formModalApi.setData(popupParams);
    formModalApi.open();
  } else {
    formDrawerApi.setData(popupParams);
    formDrawerApi.open();
  }
}

// 默认的编辑方法
export function handlerEdit(row) {
  message.success(`handlerEdit: ${JSON.stringify(row)}`);
}

// 默认的删除方法
export function handlerDel(row) {
  message.success(`handlerDel: ${JSON.stringify(row)}`);
}

// 默认的批量删除方法
export function handlerBatchDel() {
  message.success('handlerBatchDel');
}

// 默认的新增下级方法
export function handlerAddChild(row) {
  message.success(`handlerAddChild: ${JSON.stringify(row)}`);
}

// 默认的展开全部节点
export function handlerExpandAll() {
  message.success('handlerExpandAll');
}

// 默认的折叠全部节点
export function handlerCollapseAll() {
  message.success('handlerCollapseAll');
}

// 默认方法
function defaultFun() {
  message.success('这是一个默认的方法,没有任何方法体');
}

// 根据功能类型获取按钮方法
export function getBtnByType(type: BtnFunctionType) {
  switch (type) {
    case 'add': {
      return handlerAdd;
    }
    case 'addChild': {
      return handlerAddChild;
    }
    case 'batchDel': {
      return handlerBatchDel;
    }
    case 'collapseAll': {
      return handlerCollapseAll;
    }
    case 'del': {
      return handlerDel;
    }
    case 'edit': {
      return handlerEdit;
    }
    case 'expandAll': {
      return handlerExpandAll;
    }
    default: {
      return defaultFun;
    }
  }
}

// 重新加载按钮赋值方法
export const loadBtn = async (newData, config): TemplateButton => {
  config.table.actionBtn.buttons = newData.table.actionBtn.buttons.map(
    (item) => {
      return {
        ...item,
        handlerFun: getBtnByType(item.btnFunctionType),
      };
    },
  );
  config.table.actionBtn.tools = newData.table.actionBtn.tools.map((item) => {
    return {
      ...item,
      handlerFun: getBtnByType(item.btnFunctionType),
    };
  });
  config.table.actionBtn.action = newData.table.actionBtn.action.map((item) => {
    return {
      ...item,
      handlerFun: getBtnByType(item.btnFunctionType),
    };
  });
};

/**
 * 重新加载列表
 */
export const loadColumns = async (config): VxeGridProps['columns'] => {
  return config.table.columns;
};
